@@ -0,0 +1,166 @@ |
||
| 1 |
+package ai.pai.client.adapter; |
|
| 2 |
+ |
|
| 3 |
+import android.content.Context; |
|
| 4 |
+import android.content.Intent; |
|
| 5 |
+import android.support.v7.widget.RecyclerView; |
|
| 6 |
+import android.view.LayoutInflater; |
|
| 7 |
+import android.view.View; |
|
| 8 |
+import android.view.ViewGroup; |
|
| 9 |
+import android.widget.ImageView; |
|
| 10 |
+import android.widget.TextView; |
|
| 11 |
+ |
|
| 12 |
+import com.android.common.utils.DeviceUtils; |
|
| 13 |
+import com.android.common.utils.TimeUtils; |
|
| 14 |
+import com.android.views.circleimageview.CircleImageView; |
|
| 15 |
+import com.nostra13.universalimageloader.core.DisplayImageOptions; |
|
| 16 |
+import com.umeng.analytics.MobclickAgent; |
|
| 17 |
+ |
|
| 18 |
+import java.util.ArrayList; |
|
| 19 |
+ |
|
| 20 |
+import ai.pai.client.R; |
|
| 21 |
+import ai.pai.client.activity.GroupActivity; |
|
| 22 |
+import ai.pai.client.activity.PhotoDetailsActivity; |
|
| 23 |
+import ai.pai.client.beans.GroupInfo; |
|
| 24 |
+import ai.pai.client.beans.GroupPhotoItem; |
|
| 25 |
+import ai.pai.client.utils.GroupCreateUtils; |
|
| 26 |
+import ai.pai.client.utils.PhotoLoader; |
|
| 27 |
+import ai.pai.client.utils.UmengEvent; |
|
| 28 |
+ |
|
| 29 |
+public class NewRecentPhotoStaggeredAdapter extends RecyclerView.Adapter<NewRecentPhotoStaggeredAdapter.MyViewHolder> {
|
|
| 30 |
+ |
|
| 31 |
+ private Context context; |
|
| 32 |
+ private LayoutInflater mInflater; |
|
| 33 |
+ private DisplayImageOptions options; |
|
| 34 |
+ private ArrayList<GroupPhotoItem> photoList; |
|
| 35 |
+ private int width; |
|
| 36 |
+ |
|
| 37 |
+ public NewRecentPhotoStaggeredAdapter(Context context, ArrayList<GroupPhotoItem> photoList){
|
|
| 38 |
+ this.context = context; |
|
| 39 |
+ this.photoList = photoList; |
|
| 40 |
+ width = DeviceUtils.getScreenWidth(this.context)/2; |
|
| 41 |
+ mInflater = LayoutInflater.from(this.context); |
|
| 42 |
+ options = PhotoLoader.getPhotoOptions(); |
|
| 43 |
+ } |
|
| 44 |
+ |
|
| 45 |
+ public synchronized void clearPhotoList(){
|
|
| 46 |
+ photoList.clear(); |
|
| 47 |
+ notifyDataSetChanged(); |
|
| 48 |
+ } |
|
| 49 |
+ |
|
| 50 |
+ public synchronized void addPhotoList(ArrayList<GroupPhotoItem> photoList){
|
|
| 51 |
+ int startPosition = this.photoList.size(); |
|
| 52 |
+ this.photoList.addAll(photoList); |
|
| 53 |
+ if(startPosition==0){
|
|
| 54 |
+ notifyDataSetChanged(); |
|
| 55 |
+ }else{
|
|
| 56 |
+ notifyItemRangeInserted(startPosition,photoList.size()); |
|
| 57 |
+ } |
|
| 58 |
+ } |
|
| 59 |
+ |
|
| 60 |
+ public ArrayList<GroupPhotoItem> getPhotoList(){
|
|
| 61 |
+ return photoList; |
|
| 62 |
+ } |
|
| 63 |
+ |
|
| 64 |
+ @Override |
|
| 65 |
+ public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
| 66 |
+ View view = mInflater.inflate(R.layout.new_stagger_recent_photo_item_view,parent,false); |
|
| 67 |
+ MyViewHolder viewHolder = new MyViewHolder(view); |
|
| 68 |
+ viewHolder.photo = (ImageView)view.findViewById(R.id.iv_stagger_photo); |
|
| 69 |
+ viewHolder.avatar = (CircleImageView)view.findViewById(R.id.iv_stagger_avatar); |
|
| 70 |
+ viewHolder.commentCount = (TextView)view.findViewById(R.id.tv_stagger_comment_count); |
|
| 71 |
+ viewHolder.name = (TextView)view.findViewById(R.id.tv_stagger_name); |
|
| 72 |
+ viewHolder.thumbUpCount = (TextView)view.findViewById(R.id.tv_stagger_like_count); |
|
| 73 |
+ viewHolder.time = (TextView)view.findViewById(R.id.tv_stagger_time); |
|
| 74 |
+ viewHolder.headLayout = view.findViewById(R.id.layout_stagger_header); |
|
| 75 |
+ viewHolder.maskView = view.findViewById(R.id.layout_image_mask); |
|
| 76 |
+ viewHolder.groupPhotoCount = (TextView) view.findViewById(R.id.tv_group_photo_count); |
|
| 77 |
+ return viewHolder; |
|
| 78 |
+ } |
|
| 79 |
+ |
|
| 80 |
+ @Override |
|
| 81 |
+ public void onBindViewHolder(MyViewHolder holder, int position) {
|
|
| 82 |
+ final GroupPhotoItem item = photoList.get(position); |
|
| 83 |
+ int height ; |
|
| 84 |
+ if(item.thumbnailWidth>0){
|
|
| 85 |
+ height =item.thumbnailHeight *width/item.thumbnailWidth; |
|
| 86 |
+ }else{
|
|
| 87 |
+ height = width*16/10; |
|
| 88 |
+ } |
|
| 89 |
+ ViewGroup.LayoutParams lp=holder.photo.getLayoutParams(); |
|
| 90 |
+ lp.height = height; |
|
| 91 |
+ holder.photo.setLayoutParams(lp); |
|
| 92 |
+ holder.photo.setOnClickListener(new View.OnClickListener(){
|
|
| 93 |
+ @Override |
|
| 94 |
+ public void onClick(View v) {
|
|
| 95 |
+ Intent intent = new Intent(context, PhotoDetailsActivity.class); |
|
| 96 |
+ intent.putExtra("list",photoList);
|
|
| 97 |
+ intent.putExtra("photo_item",item);
|
|
| 98 |
+ context.startActivity(intent); |
|
| 99 |
+ MobclickAgent.onEvent(context, UmengEvent.home_item_photo_click); |
|
| 100 |
+ } |
|
| 101 |
+ }); |
|
| 102 |
+ holder.headLayout.setOnClickListener(new View.OnClickListener(){
|
|
| 103 |
+ @Override |
|
| 104 |
+ public void onClick(View v) {
|
|
| 105 |
+ Intent intent = new Intent(context, GroupActivity.class); |
|
| 106 |
+ GroupInfo info = new GroupInfo(); |
|
| 107 |
+ info.groupId = item.groupId; |
|
| 108 |
+ info.groupName = item.groupName; |
|
| 109 |
+ info.groupAvatarId = item.groupDefaultAvatar; |
|
| 110 |
+ intent.putExtra("group",info);
|
|
| 111 |
+ context.startActivity(intent); |
|
| 112 |
+ MobclickAgent.onEvent(context, UmengEvent.home_item_group_header_click); |
|
| 113 |
+ } |
|
| 114 |
+ }); |
|
| 115 |
+ PhotoLoader.getInstance(context).displayImage(item.thumbnailUrl,holder.photo,options); |
|
| 116 |
+ if(item.groupDefaultAvatar>=0){
|
|
| 117 |
+ holder.avatar.setImageResource(GroupCreateUtils.getDrawableIdForAvatar(item.groupDefaultAvatar)); |
|
| 118 |
+ }else{
|
|
| 119 |
+ PhotoLoader.getInstance(context).displayImage(item.groupAvatar,holder.avatar,options); |
|
| 120 |
+ } |
|
| 121 |
+ holder.name.setText(item.groupName); |
|
| 122 |
+ holder.time.setText(TimeUtils.getFormattedTime(item.captureTime)); |
|
| 123 |
+ holder.thumbUpCount.setText(String.valueOf(item.thumbupNum)); |
|
| 124 |
+ holder.commentCount.setText(String.valueOf(item.commentNum)); |
|
| 125 |
+ holder.headLayout.setVisibility(View.VISIBLE); |
|
| 126 |
+ holder.maskView.setVisibility(View.GONE); |
|
| 127 |
+ |
|
| 128 |
+ if(position>0){
|
|
| 129 |
+ GroupPhotoItem lastPhoto = photoList.get(position-1); |
|
| 130 |
+ if(lastPhoto.groupId.equals(item.groupId)){
|
|
| 131 |
+ holder.headLayout.setVisibility(View.GONE); |
|
| 132 |
+ } |
|
| 133 |
+ } |
|
| 134 |
+ if(position<photoList.size()-1){
|
|
| 135 |
+ GroupPhotoItem nextPhoto = photoList.get(position+1); |
|
| 136 |
+ if(!nextPhoto.groupId.equals(item.groupId)){
|
|
| 137 |
+ holder.maskView.setVisibility(View.VISIBLE); |
|
| 138 |
+ holder.groupPhotoCount.setText("10");
|
|
| 139 |
+ } |
|
| 140 |
+ } |
|
| 141 |
+ |
|
| 142 |
+ } |
|
| 143 |
+ |
|
| 144 |
+ @Override |
|
| 145 |
+ public int getItemCount() {
|
|
| 146 |
+ return photoList.size(); |
|
| 147 |
+ } |
|
| 148 |
+ |
|
| 149 |
+ class MyViewHolder extends RecyclerView.ViewHolder{
|
|
| 150 |
+ |
|
| 151 |
+ private ImageView photo; |
|
| 152 |
+ private CircleImageView avatar; |
|
| 153 |
+ private TextView name; |
|
| 154 |
+ private TextView time; |
|
| 155 |
+ private TextView thumbUpCount; |
|
| 156 |
+ private TextView commentCount; |
|
| 157 |
+ private View headLayout; |
|
| 158 |
+ private View maskView; |
|
| 159 |
+ private TextView groupPhotoCount; |
|
| 160 |
+ |
|
| 161 |
+ public MyViewHolder(View view){
|
|
| 162 |
+ super(view); |
|
| 163 |
+ } |
|
| 164 |
+ } |
|
| 165 |
+} |
|
| 166 |
+ |
@@ -40,6 +40,7 @@ import java.util.HashMap; |
||
| 40 | 40 |
|
| 41 | 41 |
import ai.pai.client.R; |
| 42 | 42 |
import ai.pai.client.activity.MainActivity; |
| 43 |
+import ai.pai.client.adapter.NewRecentPhotoStaggeredAdapter; |
|
| 43 | 44 |
import ai.pai.client.adapter.RecentPhotoStaggeredAdapter; |
| 44 | 45 |
import ai.pai.client.beans.GroupPhotoItem; |
| 45 | 46 |
import ai.pai.client.db.DBService; |
@@ -54,7 +55,7 @@ public class TabRecentPhotoFragment extends BaseFragment implements SwipeRefresh |
||
| 54 | 55 |
|
| 55 | 56 |
private RecyclerView recyclerView; |
| 56 | 57 |
private SwipeRefreshLayout swipeRefreshLayout; |
| 57 |
- private RecentPhotoStaggeredAdapter refreshAdapter; |
|
| 58 |
+ private NewRecentPhotoStaggeredAdapter refreshAdapter; |
|
| 58 | 59 |
private HeaderAndFooterRecyclerViewAdapter photoAdapter; |
| 59 | 60 |
private EndlessRecyclerOnScrollListener scrollListener; |
| 60 | 61 |
private View loadMoreView; |
@@ -94,7 +95,7 @@ public class TabRecentPhotoFragment extends BaseFragment implements SwipeRefresh |
||
| 94 | 95 |
}else{
|
| 95 | 96 |
photoList = DBService.getInstance(getActivity()).getRecentPhotos(); |
| 96 | 97 |
} |
| 97 |
- refreshAdapter = new RecentPhotoStaggeredAdapter(getActivity(), photoList); |
|
| 98 |
+ refreshAdapter = new NewRecentPhotoStaggeredAdapter(getActivity(), photoList); |
|
| 98 | 99 |
photoAdapter = new HeaderAndFooterRecyclerViewAdapter(refreshAdapter); |
| 99 | 100 |
recyclerView.setAdapter(photoAdapter); |
| 100 | 101 |
loadMoreView = LayoutInflater .from(getActivity()).inflate(R.layout.view_load_more, recyclerView, false); |
@@ -0,0 +1,118 @@ |
||
| 1 |
+<?xml version="1.0" encoding="utf-8"?> |
|
| 2 |
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|
| 3 |
+ xmlns:app="http://schemas.android.com/apk/res-auto" |
|
| 4 |
+ android:layout_width="match_parent" |
|
| 5 |
+ android:layout_height="wrap_content" |
|
| 6 |
+ android:layout_margin="3dp" |
|
| 7 |
+ android:background="@color/white"> |
|
| 8 |
+ |
|
| 9 |
+ <ImageView |
|
| 10 |
+ android:id="@+id/iv_stagger_photo" |
|
| 11 |
+ android:layout_width="wrap_content" |
|
| 12 |
+ android:layout_height="wrap_content" |
|
| 13 |
+ android:scaleType="centerCrop" /> |
|
| 14 |
+ |
|
| 15 |
+ <RelativeLayout |
|
| 16 |
+ android:id="@+id/layout_image_mask" |
|
| 17 |
+ android:layout_width="match_parent" |
|
| 18 |
+ android:layout_height="wrap_content" |
|
| 19 |
+ android:layout_alignTop="@id/iv_stagger_photo" |
|
| 20 |
+ android:layout_alignBottom="@id/iv_stagger_photo" |
|
| 21 |
+ android:background="@color/half_transparent" > |
|
| 22 |
+ |
|
| 23 |
+ <TextView |
|
| 24 |
+ android:id="@+id/tv_group_photo_count" |
|
| 25 |
+ android:layout_width="wrap_content" |
|
| 26 |
+ android:layout_height="wrap_content" |
|
| 27 |
+ android:textColor="@color/white" |
|
| 28 |
+ android:textSize="32sp" |
|
| 29 |
+ android:drawableLeft="@drawable/plus" |
|
| 30 |
+ android:drawablePadding="5dp" |
|
| 31 |
+ android:layout_centerInParent="true" /> |
|
| 32 |
+ |
|
| 33 |
+ </RelativeLayout> |
|
| 34 |
+ |
|
| 35 |
+ <RelativeLayout |
|
| 36 |
+ android:id="@+id/layout_stagger_header" |
|
| 37 |
+ android:layout_width="match_parent" |
|
| 38 |
+ android:layout_height="40dp" |
|
| 39 |
+ android:layout_alignParentTop="true" |
|
| 40 |
+ android:background="@color/half_transparent" |
|
| 41 |
+ android:gravity="center_vertical"> |
|
| 42 |
+ |
|
| 43 |
+ <com.android.views.circleimageview.CircleImageView |
|
| 44 |
+ android:id="@+id/iv_stagger_avatar" |
|
| 45 |
+ android:layout_width="28dp" |
|
| 46 |
+ android:layout_height="28dp" |
|
| 47 |
+ android:layout_marginLeft="6dp" |
|
| 48 |
+ android:layout_marginTop="6dp" |
|
| 49 |
+ android:src="@drawable/default_avatar" |
|
| 50 |
+ app:civ_border_color="@color/pop_bg_color" |
|
| 51 |
+ app:civ_border_width="1dp" /> |
|
| 52 |
+ |
|
| 53 |
+ <TextView |
|
| 54 |
+ android:id="@+id/tv_stagger_name" |
|
| 55 |
+ android:layout_width="wrap_content" |
|
| 56 |
+ android:layout_height="wrap_content" |
|
| 57 |
+ android:layout_marginLeft="6dp" |
|
| 58 |
+ android:layout_marginTop="4dp" |
|
| 59 |
+ android:layout_toRightOf="@id/iv_stagger_avatar" |
|
| 60 |
+ android:singleLine="true" |
|
| 61 |
+ android:textColor="@color/white" |
|
| 62 |
+ android:textSize="12sp" /> |
|
| 63 |
+ |
|
| 64 |
+ <TextView |
|
| 65 |
+ android:id="@+id/tv_stagger_time" |
|
| 66 |
+ android:layout_width="wrap_content" |
|
| 67 |
+ android:layout_height="wrap_content" |
|
| 68 |
+ android:layout_alignParentBottom="true" |
|
| 69 |
+ android:layout_marginBottom="5dp" |
|
| 70 |
+ android:layout_marginLeft="6dp" |
|
| 71 |
+ android:layout_toRightOf="@id/iv_stagger_avatar" |
|
| 72 |
+ android:textColor="@color/white" |
|
| 73 |
+ android:textSize="9sp" /> |
|
| 74 |
+ </RelativeLayout> |
|
| 75 |
+ |
|
| 76 |
+ <RelativeLayout |
|
| 77 |
+ android:layout_width="match_parent" |
|
| 78 |
+ android:layout_height="30dp" |
|
| 79 |
+ android:layout_alignParentBottom="true" |
|
| 80 |
+ android:background="@color/half_transparent" |
|
| 81 |
+ android:gravity="center_vertical"> |
|
| 82 |
+ |
|
| 83 |
+ <ImageView |
|
| 84 |
+ android:id="@+id/iv_stagger_like" |
|
| 85 |
+ android:layout_width="12dp" |
|
| 86 |
+ android:layout_height="12dp" |
|
| 87 |
+ android:layout_marginLeft="8dp" |
|
| 88 |
+ android:src="@drawable/thumbup" /> |
|
| 89 |
+ |
|
| 90 |
+ <TextView |
|
| 91 |
+ android:id="@+id/tv_stagger_like_count" |
|
| 92 |
+ android:layout_width="wrap_content" |
|
| 93 |
+ android:layout_height="wrap_content" |
|
| 94 |
+ android:layout_marginLeft="4dp" |
|
| 95 |
+ android:layout_toRightOf="@id/iv_stagger_like" |
|
| 96 |
+ android:textColor="@color/white" |
|
| 97 |
+ android:textSize="10sp" /> |
|
| 98 |
+ |
|
| 99 |
+ <ImageView |
|
| 100 |
+ android:id="@+id/iv_stagger_comment" |
|
| 101 |
+ android:layout_width="12dp" |
|
| 102 |
+ android:layout_height="12dp" |
|
| 103 |
+ android:layout_marginLeft="10dp" |
|
| 104 |
+ android:layout_toRightOf="@id/tv_stagger_like_count" |
|
| 105 |
+ android:src="@drawable/comment" /> |
|
| 106 |
+ |
|
| 107 |
+ <TextView |
|
| 108 |
+ android:id="@+id/tv_stagger_comment_count" |
|
| 109 |
+ android:layout_width="wrap_content" |
|
| 110 |
+ android:layout_height="wrap_content" |
|
| 111 |
+ android:layout_marginLeft="4dp" |
|
| 112 |
+ android:layout_toRightOf="@id/iv_stagger_comment" |
|
| 113 |
+ android:textColor="@color/white" |
|
| 114 |
+ android:textSize="10sp" /> |
|
| 115 |
+ |
|
| 116 |
+ </RelativeLayout> |
|
| 117 |
+ |
|
| 118 |
+</RelativeLayout> |
@@ -5,6 +5,7 @@ |
||
| 5 | 5 |
<color name="colorAccent">#FF4081</color> |
| 6 | 6 |
|
| 7 | 7 |
<color name="transparent">#00000000</color> |
| 8 |
+ <color name="half_transparent">#60000000</color> |
|
| 8 | 9 |
<color name="white">#ffffffff</color> |
| 9 | 10 |
<color name="black">#ff000000</color> |
| 10 | 11 |
|